from rest_framework import viewsets
from rest_framework.decorators import action
from rest_framework.response import Response

from BYD_ERP.utils.pagination import GlobalPagination

from BYD_ERP.utils.base_views import MultipleDestroyMixin
from basic_info.models import NationModel, ProvinceModel, CityModel, CountyModel
from basic_info.serializer.area_serializer import NationSerializer, ProvinceSerializer, CitySerializer, CountySerializer


class NationsView(viewsets.ModelViewSet, MultipleDestroyMixin):
    """
        create:
        国家--新增

        国家新增，status：201（成功），return：新增国家信息

        destroy：
        国家--删除单个国家

        国家删除，status：204（成功），return：None

        multiple_delete:
        国家--批量删除，必传参数：ids=[1,2,3,4……]

        国家批量删除，status：204（成功），return：None

        update:
        国家--修改

        国家修改，status：200（成功），return：修改后的国家信息

        partial_update:
        国家--局部修改，只是修改国家名字

        国家局部修改，status：200（成功）

        list:
        国家--获取列表

        国家列表信息，status：200（成功），return：国家信息列表

        retrieve:
        查询某一个国家

        查询指定ID的国家，status：200（成功），return：用户国家
    """

    queryset = NationModel.objects.all()     # 设置一个默认值
    serializer_class = NationSerializer

class ProvincesView(viewsets.ModelViewSet, MultipleDestroyMixin):
    """
        create:
        省份--新增

        省份新增，status：201（成功），return：新增省份信息

        destroy：
        省份--删除单个省份

        省份删除，status：204（成功），return：None

        multiple_delete:
        省份--批量删除，必传参数：ids=[1,2,3,4……]

        省份批量删除，status：204（成功），return：None

        update:
        省份--修改

        省份修改，status：200（成功），return：修改后的省份信息

        partial_update:
        省份--局部修改，只是修改省份名字

        省份局部修改，status：200（成功）

        list:
        省份--获取某一个国家下面的省份列表，请求参数为nid(国家的ID)，没有传参表示所有国家的所有省份（州）

        省份列表信息，status：200（成功），return：省份信息列表

        retrieve:
        查询某一个省份

        查询指定ID的省份，status：200（成功），return：用户省份
    """

    queryset = ProvinceModel.objects.all()     # 设置一个默认值
    serializer_class = ProvinceSerializer
    pagination_class = GlobalPagination

    def get_queryset(self):
        # 获取某一个国家下面的省份列表，请求参数为nid(国家的ID)，没有传参表示所有国家的所有省份（州）
        nid = self.request.query_params.get('nid', None)
        if nid:
            nid = int(nid)
            return ProvinceModel.objects.filter(nation__id=nid).all()
        else:
            return ProvinceModel.objects.all()


class CitiesView(viewsets.ModelViewSet, MultipleDestroyMixin):
    """
        create:
        地级市--新增

        地级市新增，status：201（成功），return：新增地级市信息

        destroy：
        地级市--删除单个地级市

        地级市删除，status：204（成功），return：None

        multiple_delete:
        地级市--批量删除，必传参数：ids=[1,2,3,4……]

        地级市批量删除，status：204（成功），return：None

        update:
        地级市--修改

        地级市修改，status：200（成功），return：修改后的地级市信息

        partial_update:
        地级市--局部修改，只是修改地级市名字

        地级市局部修改，status：200（成功）

        list:
        地级市--获取某一个省份下面的地级市列表，请求参数为pid(省份的ID)，没有传参表示所有省份的所有地级市

        地级市列表信息，status：200（成功），return：地级市信息列表

        retrieve:
        查询某一个地级市

        查询指定ID的地级市，status：200（成功），return：用户地级市
    """

    queryset = CityModel.objects.all()     # 设置一个默认值
    serializer_class = CitySerializer
    pagination_class = GlobalPagination

    def get_queryset(self):
        # 获取某一个省份下面的地级市列表，请求参数为pid(省份的ID)，没有传参表示所有省份的所有地级市
        pid = self.request.query_params.get('pid', None)
        if pid:
            pid = int(pid)
            return CityModel.objects.filter(province__id=pid).all()
        else:
            return CityModel.objects.all()

class CountiesView(viewsets.ModelViewSet, MultipleDestroyMixin):
    """
        create:
        县级市--新增

        县级市新增，status：201（成功），return：新增县级市信息

        destroy：
        县级市--删除单个县级市

        县级市删除，status：204（成功），return：None

        multiple_delete:
        县级市--批量删除，必传参数：ids=[1,2,3,4……]

        县级市批量删除，status：204（成功），return：None

        update:
        县级市--修改

        县级市修改，status：200（成功），return：修改后的县级市信息

        partial_update:
        县级市--局部修改，只是修改县级市名字

        县级市局部修改，status：200（成功）

        list:
        县级市--获取某一个地级市下面的县级市列表，请求参数为cid(地级市的ID)，没有传参表示所有地级市的所有县级市

        县级市列表信息，status：200（成功），return：县级市信息列表

        retrieve:
        查询某一个县级市

        查询指定ID的县级市，status：200（成功），return：用户县级市
    """

    queryset = CountyModel.objects.all()     # 设置一个默认值
    serializer_class = CountySerializer
    pagination_class = GlobalPagination

    def get_queryset(self):
        # 获取某一个地级市下面的县级市列表，请求参数为cid(地级市的ID)，没有传参表示所有地级市的所有县级市
        cid = self.request.query_params.get('cid', None)
        if cid:
            cid = int(cid)
            return CountyModel.objects.filter(city__id=cid).all()
        else:
            return CountyModel.objects.all()
